// 导入生成token的包
const jwt = require('jsonwebtoken')

// 定义密钥，可以根据需求修改
const secret = 'asdasdsadsxzc'
 
// 定义短token过期时间
const accessTokenTime='10s'
 
// 定义长token过期时间
const refreshTokenTime = '1min'

// 定义短Token
const setAccessToken=(user={})=>{
   
    return jwt.sign(user,secret,{expiresIn:accessTokenTime})
}
// 定义长Token
const setRefreshToken=(user={})=>{
    return jwt.sign(user,secret,{expiresIn:refreshTokenTime})
    
}

// 验证短token是否过期
const testAccessToken=(token)=>{
    console.log(token)
    let code = 200
    if(!token){
        return{
            code:401,
            msg:'未登录或token不存在'
        }
    }
    jwt.verify(token,secret,(err,data)=>{
        if(err){
            if(err.message == 'invalid token'){
                code = 402
                msg = '无效的短token'
                return
            }
            if(err.message == 'jwt expired'){
                code = 402
                msg = '短token过期'
                return
            }
            code = 402
            msg = '未知短token错误'
            return
        }
        code = 200
        msg = '有效的短token'
        return
    })
    return{
        code,
        msg
    }
}

// 验证长token是否过期
const testRefreshToken=(token,user)=>{
    console.log(token)
    let code = 200
    let newtoken = ''
    jwt.verify(token,secret,(err,data)=>{
        if(err){
            if(err.message == 'invalid token'){
                code = 402
                msg = '无效的长token'
                return
            }
            if(err.message == 'jwt expired'){
                code = 402
                msg = '长token过期'
                return
            }
            code = 402
            msg = '未知长token错误'
            return
        }
        code = 200
        msg = '有效的长token'
        newtoken = setAccessToken(user)
        return
    })
    return{
        code,
        msg,
        newtoken
    }
}

module.exports={
    setAccessToken,     // 定义短Token
    setRefreshToken,    // 定义长Token
    testAccessToken,    // 验证短token是否过期
    testRefreshToken    // 验证长token是否过期
}